/*
 *  /linux-3.0.8/drivers/spi/nrf2401_test.h
*/
#ifndef __RC522_TEST_H
#define __RC522_TEST_H
#include <linux/types.h>

/***** user operation interface ****/

#define NRF2401_ADDR_LEN 5
#define NRF2401_PIPE_LEN 32
#define NRF2401_PIPE_PLUS 4

enum nrf2401_ioc_type {
	NRF2401_IOC_NONE_0 = 0,
	NRF2401_IOC_SET_CHIP,
	NRF2401_IOC_GET_CHIP,

	NRF2401_IOC_SET_RX_PIPE,
	NRF2401_IOC_GET_RX_PIPE,
	
	NRF2401_IOC_SET_TX_PIPE,
	NRF2401_IOC_GET_TX_PIPE,

	NRF2401_IOC_READ_PIPE,
	NRF2401_IOC_WRITE_PIPE,
	
};

enum nrf2401_ioc_rw_mode{
	NRF2401_IOC_RW_NOBLOCK = 0,
	NRF2401_IOC_RW_BLOCK,
};
struct nrf2401_ioc_transfer {
	__u32	speed_hz;
	__u32	pad;
	__u16	delay_usecs;
	__u8	bits_per_word;
	__u8	cs_change;


	enum nrf2401_ioc_type ioc_type; /* ioc type: set chip, set tx rx pipe, rw...*/
	
	enum nrf2401_ioc_rw_mode rw_mode; /* rw type: block, noblock */
	
	__u32 	delay_ms;
	
	__u8	addr_num;
	
	__u8	txrx_buf[NRF2401_PIPE_LEN + NRF2401_PIPE_PLUS];
	
};


/***** spi mode *****/
#define SPI_CPHA		0x01
#define SPI_CPOL		0x02

#define SPI_MODE_0		(0|0)
#define SPI_MODE_1		(0|SPI_CPHA)
#define SPI_MODE_2		(SPI_CPOL|0)
#define SPI_MODE_3		(SPI_CPOL|SPI_CPHA)

#define SPI_CS_HIGH		0x04
#define SPI_LSB_FIRST		0x08
#define SPI_3WIRE		0x10
#define SPI_LOOP		0x20
#define SPI_NO_CS		0x40
#define SPI_READY		0x80

#define SPI_IOC_MAGIC			'k'


#define SPI_MSGSIZE(N) \
	((((N)*(sizeof (struct nrf2401_ioc_transfer))) < (1 << _IOC_SIZEBITS)) \
		? ((N)*(sizeof (struct nrf2401_ioc_transfer))) : 0)
#define SPI_IOC_MESSAGE(N) _IOW(SPI_IOC_MAGIC, 0, char[SPI_MSGSIZE(N)])

#define SPI_IOC_RD_MODE			_IOR(SPI_IOC_MAGIC, 1, __u8)
#define SPI_IOC_WR_MODE			_IOW(SPI_IOC_MAGIC, 1, __u8)

#define SPI_IOC_RD_LSB_FIRST		_IOR(SPI_IOC_MAGIC, 2, __u8)
#define SPI_IOC_WR_LSB_FIRST		_IOW(SPI_IOC_MAGIC, 2, __u8)

#define SPI_IOC_RD_BITS_PER_WORD	_IOR(SPI_IOC_MAGIC, 3, __u8)
#define SPI_IOC_WR_BITS_PER_WORD	_IOW(SPI_IOC_MAGIC, 3, __u8)

#define SPI_IOC_RD_MAX_SPEED_HZ		_IOR(SPI_IOC_MAGIC, 4, __u32)
#define SPI_IOC_WR_MAX_SPEED_HZ		_IOW(SPI_IOC_MAGIC, 4, __u32)


#define SPI_MODE_MASK		(SPI_CPHA | SPI_CPOL | SPI_CS_HIGH \
				| SPI_LSB_FIRST | SPI_3WIRE | SPI_LOOP \
				| SPI_NO_CS | SPI_READY)


#endif



